/**
 * 文件名：AuthController.java
 * 功能：认证控制器，提供用户注册和登录接口
 * 作用：处理用户注册、登录请求，调用 AuthService 完成业务逻辑并返回 JWT Token
 * 模块关系：
 *   - 依赖 AuthService：处理注册和登录的业务逻辑
 *   - 依赖 RegisterRequest/LoginRequest：接收前端请求参数
 *   - 依赖 AuthResponse：封装返回给前端的 Token 和用户信息
 *   - 公开接口：在 SecurityConfig 中配置为不需认证即可访问
 * 作者：白永康
 * 学号：2501210209
 */
package com.example.demo.auth;

import com.example.demo.auth.dto.AuthResponse;
import com.example.demo.auth.dto.LoginRequest;
import com.example.demo.auth.dto.RegisterRequest;
import com.example.demo.auth.service.AuthService;
import com.example.demo.common.ApiResponse;
import org.springframework.web.bind.annotation.*;

/**
 * 认证控制器
 * 处理用户注册和登录请求
 */
@RestController
@RequestMapping("/auth")
public class AuthController {

    private final AuthService authService;

    /**
     * 构造函数，注入 AuthService 依赖
     * @param authService 认证服务
     */
    public AuthController(AuthService authService) {
        this.authService = authService;
    }

    /**
     * 用户注册接口
     * 路径：POST /auth/register
     * @param request 注册请求参数（用户名、密码）
     * @return 统一响应，包含 Token 和用户信息
     */
    @PostMapping("/register")
    public ApiResponse<AuthResponse> register(@RequestBody RegisterRequest request) {
        AuthResponse response = authService.register(request);
        return ApiResponse.ok(response);
    }

    /**
     * 用户登录接口
     * 路径：POST /auth/login
     * @param request 登录请求参数（用户名、密码）
     * @return 统一响应，包含 Token 和用户信息
     */
    @PostMapping("/login")
    public ApiResponse<AuthResponse> login(@RequestBody LoginRequest request) {
        AuthResponse response = authService.login(request);
        return ApiResponse.ok(response);
    }
}
